program topocart
        use MPI

        Implicit None
        integer                         :: code, nb_procs, rang, comm2D, direction, pas
        integer,parameter               :: ndims=2,N=1,E=2,S=3,W=4
        logical                         :: reorganisation
        integer,dimension(4)            :: voisin
        integer,dimension(ndims)        :: dims,coords
        integer,dimension(ndims)        :: periods

        call MPI_INIT(code)
        call MPI_COMM_SIZE(MPI_COMM_WORLD,nb_procs,code)

        periods(1)=.false.;periods(2)=.true.;reorganisation=.false.
        dims(:)=0
        call MPI_DIMS_CREATE(nb_procs,ndims,dims,code)

        call MPI_CART_CREATE(MPI_COMM_WORLD,ndims,dims,periods,reorganisation,comm2D,code)

        call MPI_COMM_BANK(comm2D,rang,code)
        call MPI_CART_COORDS(comm2D,rang,ndims,coords,code)
        print *,'processus',rang,' mes coordoonees sont : ',coords(1),coords(2)
        voisin(:)=MPI_PROC_NULL

        direction=0;pas=1
        call MPI_CART_SHIFT(comm2D,direction,pas,voisin(W),voisin(E),code)
        direction=1;pas=1
        call MPI_CART_SHIFT(comm2D,direction,pas,voisin(S),voisin(N),code)
        print *,'processus',rang,' mon voisin W est :',voisin(W)
        print *,'processus',rang,' mon voisin E est :',voisin(E)
        print *,'processus',rang,' mon voisin S est :',voisin(S)
        print *,'processus',rang,' mon voisin N est :',voisin(N)

        call MPI_FINALIZE(code)
end program topocart
